model = LinearRegression().fit(X_train, y_train)
y_pred = model.predict(X_valid)
y_pred_train = model.predict(X_train)
error_valid = mean_squared_error(y_valid, y_pred)
error_train = mean_squared_error(y_train, y_pred_train)
print(
"Степень полинома %d\nОшибка на валидации (тесте) %.3f\nОшибка на обучении %.3f" %
(degree, error_valid, error_train)
)
print("-------------------------------")
print("Из-за того, что в процессе тренировки данные были перемешаны, давай их заново мы отсортируем
по порядку:\nСортируем...\nСортируем...\nГотово!")
order_test = np.argsort(X_valid[:,0])
print("Индексы от наименьшего к наибольшему для массива X: ",order_test)
print("-------------------------------")
plt.scatter(X_valid[:,0][order_test], y_valid[order_test], 40, 'g', 'o', alpha=0.8)
print("Норма вектора весов \t||w|| = %.2f" % (norm(model.coef_)))
# визуализируем решение
x_linspace = np.linspace(data['x_train'].min(), data['x_train'].max(), num=100)
y_linspace = model.predict(generate_degrees(x_linspace, degree))
if checker ==1:
plt.plot(x_linspace, y_linspace,label=f'Полиномиальная ф-я')
return error_valid, error_train, norm(model.coef_)
degrees = []
valid_errors = []
train_errors = []
w_norm = []
degree = 3
checker=1
error_valid, error_train, coef_norm = train_polynomial(degree, data,checker)
degrees.append(degree)
valid_errors.append(error_valid)
train_errors.append(error_train)
w_norm.append(coef_norm)
Степень полинома 3
Ошибка на валидации (тесте) 0.111
Ошибка на обучении 0.069
-------------------------------
Из-за того, что в процессе тренировки данные были перемешаны, давай их заново мы отсортируем по порядку:
Сортируем...
Сортируем...
Готово!
Индексы от наименьшего к наибольшему для массива X: [2 7 9 0 4 1 8 5 3 6]
-------------------------------
Норма вектора весов ||w|| = 2.00